//
//  JKResponse.h
//  app
//
//  Created by huangbenhua on 15-4-10.
//  Copyright (c) 2015年 hdaren. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "UBTargetCaller.h"

/**
 API返回码说明
 0：正确返回
 1：请求参数错误
 2：用户尚未登录
 3：该项操作已经存在，不可再操作。如用户名已被注册、已经赞过
 4：数据已被穷尽，没有更多的数据
 6：该项操作先行条件未达成，没有权限进行操作。如发私信须先关注、被禁言等
 7: 二次绑定第三方，切换账号
 11:该贴子已经被删除
 100  抱歉商品缺货，您可以选择其他商品
 101  抱歉商品已下架，您可以选择其他商品
 102  抱歉我们无法送达您的收货地，可以联系客服我们会为您人工处理
 500：接口系统出错，一般是写入数据出错
 1000：本地网络错误（断网，超时等）
 **/
AS_ENUM(JKResponseStatus){
    JKResponseOK = 0,
    JKResponseTail  = 4,
    JKResponseInvalidParams = 1,
    JKResponseOffline = 2,
    JKResponseAlreadyDone = 3,
    JKResponseRejected = 6,
    JKResponseAlreadyBind = 7,
    JKResponseTimeout = 8,
    JKResponseDeleted = 11,
    JKResponseGoodsOutOfStock = 100,
    JKResponseStatusGoodsOffShelves = 101,
    JKResponseStatusAddrUnreachable = 102,
    JKResponseServerError = 500,
    JKResponseLocalError = 1000
};

@interface JKResponse : NSObject

-(id)initWithResponse:(id)resp req:(id)req data:(id)data;

/** 此方法已不用,如果各位有需要请使用上面的方法进行初始化.谢谢*/
-(id)initWithResponse:(id)response req:(id)req;

-(id)initWithError:(NSError*)error req:(id)req;

@property (nonatomic, readonly) JKResponseStatus status;
@property (nonatomic, readonly) BOOL OK;
@property (nonatomic, readonly) BOOL success;
@property (nonatomic, readonly) BOOL failure;

@property (nonatomic, readonly) NSString* message;
@property (nonatomic, readonly) NSError* error;
/** 响应头中包含的服务器时间戳*/
@property (nonatomic, readonly) long timestamp;
@property (nonatomic, readonly) NSDictionary* content;

@property (nonatomic, copy) NSURLRequest * request;

-(BOOL)isTail;

-(BOOL)hasContent;
-(BOOL)hasMore;
-(BOOL)hasError;

- (NSArray *)getCookies;
- (NSHTTPCookie*)getCookie:(NSString*)name;

/** 获取此次请求头中 name 对应的 value*/
- (NSString *)getResponseHeader:(NSString*)name;

-(id)objectForKey:(NSString*)key;
-(id)objectForKey:(NSString*)key nilValue:(id)val;

-(NSDictionary*)dictForKey:(NSString*)key;
-(NSArray*)arrayForKey:(NSString*)key;
-(NSString*)stringForKey:(NSString*)key;
-(NSNumber*)numberForKey:(NSString*)key;

-(NSString*)stringForKey:(NSString*)key nilValue:(NSString*)str;
-(NSNumber*)numberForKey:(NSString*)key nilValue:(NSNumber*)num;



/*! @brief 更新本地时间和网络时间的差值
 *
 * 此方法会根据你的请求获取到响应头上标记的网络时间,然后和本地时间取差.将这个差值保存在本地     但基于不同网络服务器的返回机制可能你的响应头里面标记的网络时间是过时的,所以这个方法使用的时候需要谨慎...
 *
 * @param 不需要参数
 * @return 无
 */
- (void)refreshTheDifferentOfNativeTimeAndWebTime;

@end
